Functor
  1. 容器：包含值和值的变形关系(这个变形关系就是函数)
  2. 函子：是一个特殊的容器，通过一个普通的对象来实现，该对象具有map方法，map方法可以运行一个函数对值进行处理(变形关系)

总结
  1. 函数式编程的运算不直接操作值，而是由函子完成
  2. 函子就是一个实现了map契约的对象
  3. 我们可以把函子想象成一个盒子，这个盒子里封装了一个值
  4. 想要处理盒子中的值，我们需要给盒子中的map方法传递一个处理值的函数(纯函数)，由这个函数来对值进行处理
  5. 最终map方法返回一个包含新值的盒子(函子)

  
class Container {
  constructor (value) {
    this._value = value
  }

  map (fn) {
    return new Container(fn(this._value)) // 这就是最基本的函子
  }
}

let r = new Container(5).map(x => x + 1).map(x => x * x )
console.log(r)



class Container {
  static of (value) {
    return new Container(value)
  }

  constructor (value) {
    this._value = value
  }

  map (fn) {
    return new Container(fn(this._value)) // 这就是最基本的函子
  }
}

let r = Container.of(5).map(x => x + 1).map(x => x * x )
console.log(r)